package com.shujia.zookeeper;

import org.apache.zookeeper.*;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class Code02CreateNode {
    public static void main(String[] args) throws IOException, InterruptedException, KeeperException {

        int sessionTimeout = 5 * 1000;
        ZooKeeper zkCli = new ZooKeeper("master:2181,node1:2181,node2:2181", sessionTimeout, new Watcher() {
            // 处理监视结果
            @Override
            public void process(WatchedEvent event) {
                System.out.println("监视器被打开... 正在连接...");
            }
        });

        /**
         * 节点路径
         * path – the path for the node
         * 节点数据
         * data – the initial data for the node
         * Zookeeper权限控制
         * acl – the acl for the node
         * ZooDefs.Ids 该类中提供了 Zookeeper权限控制选项
         * OPEN_ACL_UNSAFE: 可以设定当前创建的节点可以被所有人使用，并且具有读写权限
         * CREATOR_ALL_ACL: 可以被所有人使用，但具有写权限
         * READ_ACL_UNSAFE: 可以被所有人使用，但具有读权限
         * 创建模式
         * 枚举类： CreateMode
         * PERSISTENT ：创建持久化节点
         * PERSISTENT_SEQUENTIAL：创建持久化序列化节点
         * EPHEMERAL : 临时节点
         * EPHEMERAL_SEQUENTIAL：创建临时序列化节点
         * CONTAINER: 容器节点
         * PERSISTENT_WITH_TTL： 持久化节点并且具有TTL属性，可以用来做节点倒计时
         * PERSISTENT_SEQUENTIAL_WITH_TTL
         * createMode – specifying whether the node to be created is ephemeral and/or sequential
         * public String create(final String path, byte data[], List<ACL> acl,
         *             CreateMode createMode)
         */
        zkCli.create(
                "/api",
                "create node".getBytes(StandardCharsets.UTF_8),
                ZooDefs.Ids.OPEN_ACL_UNSAFE,
                CreateMode.PERSISTENT
        );


        zkCli.close();
    }
}
